package cl.tinet.reservaCD;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import cl.tinet.reservaCD.exception.SalaExisteException;
import cl.tinet.reservaCD.exception.SalaNoExisteException;
import cl.tinet.reservaCD.modelo.Sala;
import cl.tinet.reservaCD.sala.SalaBean;

/**
 * Managed Bean del usuario.
 * 
 * @author Carlos Duque
 * 
 */
@ManagedBean
@ViewScoped
public class SalaMB implements Serializable {

    /**
     * Serial de la clase.
     */
    private static final long serialVersionUID = 1L;

    /**
     * Instancia de Sala.
     */
    private Sala sala;

    /**
     * Lista con los usuarios.
     */
    private List<Sala> salas;

    /**
     * Instancia de bean Sala.
     */
    @EJB(mappedName = "beanSala", name = "beanSala")
    private transient SalaBean bean;

    /**
     * Instanciador de nuevo Entity Manager .
     */
    @PostConstruct
    public void init() {
        if (sala == null) {
            sala = new Sala();
        }
    }

    /**
     * 
     * Metodo get de la sala.
     * 
     * @return sala.
     */
    public Sala getSala() {
        return sala;
    }

    /**
     * Metodo set de la sala.
     * 
     * @param sala
     *            sala.
     */
    public void setSala(Sala sala) {
        this.sala = sala;
    }

    /**
     * Metodo agregar Sala MG.
     * 
     * @return a la pagina que se va a dirigir.
     */
    public String agregarSalaMG() {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
         
            bean.crearSala(sala);
        } catch (SalaExisteException e) {
            context.addMessage(null, new FacesMessage("Successful", "Mensaje: "
                    + e.getMessage()));
        }
        return "usuarioAdministrador.jsf";
    }

    /**
     * Metodo borrar una sala MG.
     * 
     * @return a la pagina que se va a dirigir.
     */
    public String borrarUsuarioMG() {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            bean.eliminarSala(sala);
        } catch (SalaNoExisteException e) {
            context.addMessage(null, new FacesMessage("Successful", "Mensaje: "
                    + e.getMessage()));
        }
        return "sala";
    }

    /**
     * Metodo para actualizar la sala.
     * 
     * @return la pagina quese va a dirigir.
     */
    public String actualizarSalaMG() {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            bean.actualizarSala(sala);
        } catch (SalaNoExisteException e) {
            context.addMessage(null, new FacesMessage("Successful", "Mensaje: "
                    + e.getMessage()));
        }

        return "sala";
    }

    /**
     * Metodo que retorna la lista de las Salas.
     * 
     * @return lista con las salas de la base de datos
     */
    public List<Sala> listarSalaMG() {
        salas = bean.listarSala();
        return salas;
    }

    /**
     * Metodo que carga el grip.
     * 
     * @param salaBusqueda
     *            usuario a cargar en el pop up
     */
    public void mostrarBorrarSala(Sala salaBusqueda) {

        this.sala = bean.buscarSala(salaBusqueda);
        org.primefaces.context.RequestContext.getCurrentInstance().update(
                "formBorrar:gridBorrar");
        org.primefaces.context.RequestContext.getCurrentInstance().execute(
                "PF('dialogoBorrarSala').show()");

    }

    /**
     * Metodo que carga el grip.
     * 
     * @param salaBusqueda
     *            usuario a cargar en el pop up
     */
    public void mostrarActualizarUsuario(Sala salaBusqueda) {

        this.sala = bean.buscarSala(salaBusqueda);
        org.primefaces.context.RequestContext.getCurrentInstance().update(
                "formActualizar:gridActualizar");
        org.primefaces.context.RequestContext.getCurrentInstance().execute(
                "PF('dialogoActualizarSala').show()");

    }

    /**
     * Metodo que carga el select Items.
     * 
     * @return items
     */
    public List<SelectItem> getCargarSalas() {

        List<SelectItem> items = new ArrayList<SelectItem>();
        List<Sala> salaList = bean.listarSala();

        for (Sala salaa : salaList) {
            items.add(new SelectItem(salaa.getNombreSala(), salaa
                    .getNombreSala()));
        }
        return items;
    }

}
